package com.cskaoyan._02handle._03throws;

import java.io.FileNotFoundException;

/**
 * @description:
 * @author: 景天
 * @date: 2023/2/16 17:14
 **/
/*
用在方法的声明处
语法:
修饰符  返回值 方法名(形参列表)  throws 异常列表 {}

注意:
- 子类方法不能比父类抛出更多的编译时异常
- 父类如果抛出Exception,那么子类就可以随便抛出
- 建议子类重写的时候保持跟父类一样的异常列表
 */
public class Demo {
    public static void main(String[] args){
        // 针对运行时异常
        // func1();

        // 针对编译时异常
        try {
            func2();
        } catch (Exception e) {
            System.out.println("克隆异常");
        }
        System.out.println("main end");
    }

    // throws + 编译时异常
    // 表示异常不在这里处理,交给方法的调用者处理
    private static void func2() throws CloneNotSupportedException, Exception {
        Demo demo = new Demo();
        demo.clone();
    }

    // throws+运行时异常--->没有太大的意义 加不加都一样 运行时异常会自动向上抛出
    private static void func1() throws ArithmeticException, NullPointerException{
        System.out.println("func1 start");
        System.out.println(10/0);
        System.out.println("func1 end");
    }
}

class Father{
    void m1() throws CloneNotSupportedException {

    }
    // 如果父类中的范围是最大的, 子类就无所谓了
    void m2() throws Exception{

    }
}

class Son extends Father{
    // 重写父类中方法

    // 不能比父类抛出更多的 编译时 异常
    @Override
    void m1() throws NullPointerException,ArithmeticException,ClassCastException {

    }

    @Override
    void m2() throws CloneNotSupportedException, FileNotFoundException {

    }
}